/* 
闭包是指有权访问另外一个函数作用域中的变量的函数.可以理解为(能够读取其他函数内部变量的函数)

闭包的作用: 正常函数执行完毕后,里面声明的变量被垃圾回收处理掉,但是闭包可以让作用域里的 变量,在函数执行完之后依旧保持没有被垃圾回收处理掉

注意点：由于闭包会使得函数中的变量都被保存在内存中，内存消耗很大，所以不能滥用闭包，否则会造成网页的性能问题，在IE中可能导致内存泄露。解决方法是，在退出函数之前，将不使用的局部变量全部删除。
*/
function foo() {
  let name = "Tom";
  return function () {
    console.log(name);
  };
}

let res = foo();
res(); // 读取foo函数内部name变量
console.log("------------------------分割线--------------------------");

// 利用闭包实现计数器
function addCount(addName = "addCount") {
  let sum = 0;
  return function () {
    sum += 1;
    console.log(sum, addName);
  };
}

let add1 = addCount("add1");
let add2 = addCount("add2");

add1(); // 1
add1(); // 2
// 相互独立不影响
add2(); // 1
add2(); // 2

